package com.example.pt.service;

import com.example.pt.entity.User;
import com.example.pt.entity.UserLevel;

/**
 * 用户等级服务接口
 */
public interface UserLevelService {
    
    /**
     * 计算用户积分
     * 积分计算公式：上传量*5 + 下载量*2 + 保种积分*3 + 初始积分
     * @param userId 用户ID
     * @return 用户积分
     */
    int calculateUserPoints(Integer userId);
    
    /**
     * 计算用户保种积分
     * 保种积分：∑((单个文件保种时间-3)*对应稀缺性系数)
     * 对应稀缺性系数：做种者数量 ≤ 2，稀缺性系数为2.0；3 ≤ 做种者数量 ≤ 5，稀缺性系数为1.5；做种者数量 ≥ 6，稀缺性系数为1.0
     * @param userId 用户ID
     * @return 保种积分
     */
    int calculateSeedPoints(Integer userId);
    
    /**
     * 更新用户等级
     * @param userId 用户ID
     * @return 用户当前等级
     */
    UserLevel updateUserLevel(Integer userId);
    
    /**
     * 获取用户当前等级
     * @param userId 用户ID
     * @return 用户当前等级
     */
    UserLevel getUserLevel(Integer userId);
    
    /**
     * 新用户使用邀请码注册奖励积分
     * @param userId 新用户ID
     * @param invitationCode 邀请码
     * @return 是否奖励成功
     */
    boolean rewardNewUserWithInvitation(Integer userId, String invitationCode);
    
    /**
     * 用户兑换邀请码
     * @param userId 用户ID
     * @return 生成的邀请码
     * @throws Exception 如果用户积分不足或等级不够
     */
    String exchangeInvitationCode(Integer userId) throws Exception;
    
    /**
     * 更新被邀请用户的邀请者积分
     * @param invitationCode 邀请码
     * @return 是否更新成功
     */
    boolean updateInviterPoints(String invitationCode);
} 